解决pod lib lint xxx.podspec不支持i386编译环境

问题发生

  • 最近在准备将极光推送的SDK进行组件化管理的过程中,碰到了怎么都校验不通过的问题,一开始一直以为是我添加静态库的方式有问题吧,但事实上并没有,经过了多次修改之后,感到一丝灰心,报错信息如下:

    The following build commands failed:
    Ld /Users/YanYi/Library/Developer/Xcode/DerivedData/App-dokqufshqekrqxajlpsxnsqnccom/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/i386/App normal i386
    
    (1 failure)
    Testing with `xcodebuild`.
    -> JPushApiManager (3.1.2)
    - ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code.
    

    其中有两条提示如下:

- NOTE  | [iOS] xcodebuild:  ld: warning: ignoring file /Users/YanYi/Desktop/PublicPodsCode/JPushApiManager/libs/libjcore-ios-1.2.6.a, missing required architecture i386 in file /Users/YanYi/Desktop/PublicPodsCode/JPushApiManager/libs/libjcore-ios-1.2.6.a (4 slices)
- NOTE  | [iOS] xcodebuild:  ld: warning: ignoring file /Users/YanYi/Desktop/PublicPodsCode/JPushApiManager/libs/libjpush-ios-3.1.2.a, missing required architecture i386 in file /Users/YanYi/Desktop/PublicPodsCode/JPushApiManager/libs/libjpush-ios-3.1.2.a (4 slices)

顺着 missing required architecture i386 in file 的提示,可以大致知道该库在i386环境下校验不通过,到网上一找,崩溃。。。原来,你只要确定第三方库没问题,还有可以跳过相应平台校验这一说的:

那么照着来吧!

  • 终端输入如下命令找到cocoapods的安装位置

    $ gem which cocoapods
    
    • 得到提示:

      $ /usr/local/lib/ruby/gems/2.3.0/gems/cocoapods-1.5.3/lib/cocoapods.rb
      
  • 进入到 /usr/local/lib/ruby/gems/2.3.0/gems/cocoapods-1.5.3/lib/目录下找到并打开 validator.rb 文件,找到如下代码:

    # @return [String] Executes xcodebuild in the current working directory and
    #         returns its output (both STDOUT and STDERR).
    #
    def xcodebuild(action, scheme, configuration)
        require 'fourflusher'
        command = %W(clean #{action} -workspace #{File.join(validation_dir, 'App.xcworkspace')} -scheme #{scheme} -configuration #{configuration})
        case consumer.platform_name
        when :osx, :macos
            command += %w(CODE_SIGN_IDENTITY=)
        when :ios
            command += %w(CODE_SIGN_IDENTITY=- -sdk iphonesimulator)
            command += Fourflusher::SimControl.new.destination(:oldest, 'iOS', deployment_target)
            #        command += %w(--help)
        when :watchos
            command += %w(CODE_SIGN_IDENTITY=- -sdk watchsimulator)
            command += Fourflusher::SimControl.new.destination(:oldest, 'watchOS', deployment_target)
        when :tvos
            command += %w(CODE_SIGN_IDENTITY=- -sdk appletvsimulator)
            command += Fourflusher::SimControl.new.destination(:oldest, 'tvOS', deployment_target)
        end
    
        begin
            _xcodebuild(command, true)
            rescue => e
            message = 'Returned an unsuccessful exit code.'
            message += ' You can use `--verbose` for more information.' unless config.verbose?
            error('xcodebuild', message)
            e.message
        end
    end
    

将如下两行代码注掉

when :ios
    command += %w(CODE_SIGN_IDENTITY=- -sdk iphonesimulator)
    command += Fourflusher::SimControl.new.destination(:oldest, 'iOS', deployment_target)

改成如下代码即可:

command += %w(--help)

该做法直接跳过了iOS平台的校验,不会再出现报错,但相应的,你的代码如果真的有错误也不会提示,所以需要确保自己的代码没问题再来修改这个地方。